package cn.itcast.item.service.impl;

import cn.itcast.hmall.dto.common.PageDTO;
import cn.itcast.hmall.dto.common.ResultDTO;
import cn.itcast.hmall.dto.item.SearchItemDTO;
import cn.itcast.hmall.pojo.item.Item;
import cn.itcast.item.mapper.ItemMapper;
import cn.itcast.item.service.ItemService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;

@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService {

    @Autowired
    ItemMapper itemMapper;


    @Override
    public PageDTO<Item> findAll(SearchItemDTO searchItemDTO) {
        Integer page = searchItemDTO.getPage();
        Integer size = searchItemDTO.getSize();
        // 构建分页条件
        Page<Item> resultPage = new Page<>(page, size);
        //LambdaQueryWrapper
        LambdaQueryWrapper<Item> wrapper = new LambdaQueryWrapper<>();
        //判断是否输入商品的名称
        wrapper.like(null != searchItemDTO.getName(), Item::getName, searchItemDTO.getName());
        // 判断是否输入品牌
        wrapper.like(null != searchItemDTO.getBrand(), Item::getBrand, searchItemDTO.getBrand());
        // 判断是否输入分类
        wrapper.like(null != searchItemDTO.getCategory(), Item::getCategory, searchItemDTO.getCategory());
        // 判读是否输入日期  从...开始
        wrapper.le(null != searchItemDTO.getEndDate(), Item::getUpdateTime, searchItemDTO.getEndDate());
        // 从.... 结束
        wrapper.ge(null != searchItemDTO.getBeginDate(), Item::getCreateTime, searchItemDTO.getBeginDate());
        // 执行分页请求
        Page<Item> itemPage = itemMapper.selectPage(resultPage, null);
        // 获取查询到的item数据   getRecords 请求中指定的所有用户数据
        List<Item> records = itemPage.getRecords();
        // 获取查询的总条数  getTotal() 当前页的记录数
        long total = itemPage.getTotal();
        // 判断集合是否为空
        if (CollectionUtils.isEmpty(records) || total == 0) {
            throw new RuntimeException("查询数据失败");
        }

        return new PageDTO<>(total, records);
    }

    /**
     * 上下架商品
     *
     * @param id
     * @param status
     * @return
     */
    @Override
    public ResultDTO statusById(Long id, Integer status) {
        // builder() 它其实是一种设计模式，叫做建造者模式，它的含义是将一个复杂的对象的构建与它的表示分离，同样的构建过程可以创建不同的表示
        Item build = Item.builder().id(id).status(status).build();
        int i = itemMapper.updateById(build);
        if (i == 0) {
            return ResultDTO.error("修改信息失败!!!");
        }
        return ResultDTO.ok("修改了" + i + "条数据");
    }


}


